Apex Batch Processing (Apex Batch Processing)

Computer Programming - এপেক্স (Apex)
229
229

Apex Batch Processing হলো Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের জন্য ব্যবহৃত একটি Asynchronous পদ্ধতি। এটি বড় ডেটাসেটকে ছোট ছোট অংশে ভাগ করে প্রসেসিং করে, যা গভর্নর লিমিট অতিক্রম না করেই কার্যকরীভাবে বিশাল পরিমাণ ডেটা প্রক্রিয়া করতে সহায়ক। Apex Batch Processing সাধারণত লং-রানিং প্রসেস যেমন ডেটা আপডেট, রেকর্ড ডিলিট, বা বড় ডেটাসেটের উপর নির্দিষ্ট অপারেশন চালানোর জন্য ব্যবহৃত হয়।


Apex Batch Processing এর মূল উপাদান

Apex Batch Processing ক্লাস তিনটি মেথডের মাধ্যমে কাজ করে:

  1. start: এই মেথডটি ডেটা সংগ্রহ করে প্রক্রিয়াকরণের জন্য প্রস্তুত করে।
  2. execute: ডেটার ব্যাচে নির্দিষ্ট কাজ চালায়।
  3. finish: সমস্ত ব্যাচ প্রসেসিং শেষে চূড়ান্ত কাজ সম্পন্ন করে।

Apex Batch Processing এর গঠন

Batch ক্লাসে Database.Batchable ইন্টারফেস ইমপ্লিমেন্ট করতে হয়।

apex

Copy code

global class BatchExample implements Database.Batchable<SObject> {
    global Database.QueryLocator start(Database.BatchableContext BC) {
        // Start method: Query to fetch records for processing
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    global void execute(Database.BatchableContext BC, List<SObject> scope) {
        // Execute method: Process each batch of records
        for (SObject s : scope) {
            Account acc = (Account) s;
            acc.Name = acc.Name + ' - Processed';
        }
        update scope;
    }

    global void finish(Database.BatchableContext BC) {
        // Finish method: Final actions after all batches are processed
        System.debug('Batch process completed.');
    }
}
  • start Method: start মেথডে SOQL কুয়েরির মাধ্যমে প্রক্রিয়াকরণের জন্য ডেটা সিলেক্ট করা হয়।
  • execute Method: execute মেথডে ডেটার ব্যাচে নির্দিষ্ট লজিক চালানো হয়।
  • finish Method: finish মেথডে সমস্ত ব্যাচ প্রসেসিং সম্পন্ন হওয়ার পরে চূড়ান্ত কাজ সম্পন্ন করা হয়।

Batch Apex চালানোর জন্য

Database.executeBatch(new BatchExample(), 100);
  • executeBatch: executeBatch মেথড দিয়ে Batch Apex চালানো হয়। দ্বিতীয় প্যারামিটার হিসেবে ব্যাচ সাইজ নির্ধারণ করা হয় (যেমন ১০০)।

Batch Apex এর গুরুত্বপূর্ণ ফিচার

  1. ব্যাচ সাইজ নিয়ন্ত্রণ: Batch Apex বড় ডেটাসেটকে ২০০টি রেকর্ডের ব্যাচে বিভক্ত করে গভর্নর লিমিট অতিক্রম করা এড়ায়।
  2. Asynchronous Processing: এটি ব্যাকগ্রাউন্ডে প্রক্রিয়া করে এবং ব্যবহারকারীর ইন্টারফেসে কোনও লোড ফেলে না।
  3. লং-রানিং প্রসেস সমর্থন: বড় এবং জটিল লজিক্যাল কাজগুলি Batch Apex ব্যবহার করে ব্যাকগ্রাউন্ডে সম্পন্ন করা যায়।
  4. Final Processing in Finish Method: সমস্ত ব্যাচ সম্পন্ন হওয়ার পরে finish মেথডে চূড়ান্ত কাজ সম্পন্ন করা যায়।

Batch Apex এর ব্যবহার ক্ষেত্র

  1. বড় ডেটাসেট আপডেট: বড় ডেটাসেটের মধ্যে ব্যাপক পরিবর্তন বা আপডেট প্রক্রিয়াকরণ।
  2. ডেটা আর্কাইভিং এবং ক্লিনআপ: নির্দিষ্ট সময় পর ডেটা আর্কাইভিং বা অপ্রয়োজনীয় রেকর্ড মুছে ফেলা।
  3. Bulk Email Processing: নির্দিষ্ট গ্রুপে প্রচুর ইমেইল পাঠানো বা নোটিফিকেশন প্রদান।
  4. Scheduled Reporting: নির্দিষ্ট সময়ে বড় ডেটাবেস থেকে রিপোর্ট তৈরি এবং সংরক্ষণ।
  5. ডেটা ইন্টিগ্রেশন: অন্য সিস্টেমের সাথে ডেটা ইন্টিগ্রেশনের জন্য বড় ডেটাসেট সিঙ্ক্রোনাইজেশন।

Batch Apex এর ভালো অনুশীলন

  1. ব্যাচ সাইজ সীমাবদ্ধ রাখুন: বড় ডেটাসেটের জন্য ব্যাচ সাইজ (যেমন ১০০ বা ২০০) নির্ধারণ করুন, যা গভর্নর লিমিট মেনে প্রক্রিয়াকরণের জন্য সহায়ক।
  2. ব্যাচে SOQL এবং DML সীমিত রাখুন: প্রতিটি ব্যাচের মধ্যে কম SOQL ও DML ব্যবহার করুন এবং ইনজেকশন প্রতিরোধ নিশ্চিত করুন।
  3. Exception Handling ব্যবহার করুন: try-catch ব্লক দিয়ে Exception Handling নিশ্চিত করুন, যাতে ব্যাচের একটি অংশে সমস্যা হলেও প্রক্রিয়া ব্যাহত না হয়।
  4. Database.Stateful ইন্টারফেস ব্যবহার: ডেটা অবস্থান ট্র্যাক রাখতে Database.Stateful ইন্টারফেস ব্যবহার করা যেতে পারে।
  5. Test Coverage নিশ্চিত করুন: Batch Apex-এর জন্য আলাদা টেস্ট ক্লাস লিখে ৭৫% কোড কাভারেজ নিশ্চিত করুন।

উদাহরণ: Stateful Batch Apex

global class StatefulBatchExample implements Database.Batchable<SObject>, Database.Stateful {
    global Integer processedRecords = 0;

    global Database.QueryLocator start(Database.BatchableContext BC) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    global void execute(Database.BatchableContext BC, List<SObject> scope) {
        for (SObject s : scope) {
            Account acc = (Account) s;
            acc.Name = acc.Name + ' - Processed';
            processedRecords++;
        }
        update scope;
    }

    global void finish(Database.BatchableContext BC) {
        System.debug('Total Records Processed: ' + processedRecords);
    }
}
  • Database.Stateful: এখানে Database.Stateful ইন্টারফেস ব্যবহার করে ব্যাচ প্রসেসিং চলাকালীন ডেটা স্টেট ট্র্যাক রাখা হয়েছে।

Batch Apex এর সীমাবদ্ধতা

  1. Max Batches Per Day: Salesforce প্ল্যাটফর্মে প্রতিদিন সর্বাধিক ২৫০,০০০ ব্যাচ প্রসেসিং করা যায়।
  2. সর্বাধিক ব্যাচ সাইজ: প্রতিটি ব্যাচে সর্বাধিক ২০০টি রেকর্ড প্রক্রিয়া করা যায়।
  3. Governor Limits: ব্যাচের প্রতিটি অংশে SOQL ও DML অপারেশনের গভর্নর লিমিট মেনে চলতে হয়।
  4. Asynchronous Apex Limits: একক ট্রানজ্যাকশনে সর্বাধিক ৫টি ব্যাচ প্রসেস ট্রিগার করা যায়।

Batch Apex এর উদাহরণ: টেস্ট ক্লাস সহ

Apex Class: Batch Example

global class BatchExample implements Database.Batchable<SObject> {
    global Database.QueryLocator start(Database.BatchableContext BC) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    global void execute(Database.BatchableContext BC, List<SObject> scope) {
        for (SObject s : scope) {
            Account acc = (Account) s;
            acc.Name = acc.Name + ' - Processed';
        }
        update scope;
    }

    global void finish(Database.BatchableContext BC) {
        System.debug('Batch process completed.');
    }
}

Test Class

@isTest
public class BatchExampleTest {
    @isTest
    static void testBatchExecution() {
        // Test data creation
        List<Account> accList = new List<Account>();
        for (Integer i = 0; i < 500; i++) {
            accList.add(new Account(Name = 'Test Account ' + i));
        }
        insert accList;

        // Execute batch
        Test.startTest();
        Database.executeBatch(new BatchExample(), 100);
        Test.stopTest();

        // Verify that names were updated
        List<Account> updatedAccounts = [SELECT Name FROM Account WHERE Name LIKE 'Test Account% - Processed'];
        System.assertEquals(500, updatedAccounts.size(), 'All accounts should be processed');
    }
}
  • Test Data Creation: টেস্ট মেথডে ৫০০টি Account রেকর্ড তৈরি করা হয়েছে।
  • Test Coverage নিশ্চিত: Database.executeBatch এবং System.assertEquals ব্যবহার করে নাম পরিবর্তন সঠিকভাবে সম্পন্ন হয়েছে কি না তা যাচাই করা হয়েছে।

সারসংক্ষেপ

Apex Batch Processing Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের জন্য ব্যবহৃত একটি কার্যকরী এবং নির্ভরযোগ্য পদ্ধতি। এটি ব্যাকগ্রাউন্ডে বড় পরিমাণ ডেটা প্রক্রিয়া করে এবং গভর্নর লিমিট অতিক্রম না করেই ডেটা আপডেট, ক্লিনআপ, এবং রিপোর্টিং-এর মতো কাজ সম্পন্ন করতে সহায়ক। সঠিক ব্যাচ সাইজ, Exception Handling, এবং Stateful অপশনের মাধ্যমে Batch Apex-কে আরও উন্নত ও কার্যক্ষম করা সম্ভব। Test Coverage নিশ্চিত করে এবং গভর্নর লিমিট মেনে Batch Apex ব্যবহার করে Salesforce অ্যাপ্লিকেশনকে আরও দক্ষ ও নির্ভরযোগ্য করে তোলা যায়।

Content added By

Batch Apex এর মৌলিক ধারণা

201
201

Batch Apex হলো Salesforce-এর একটি Asynchronous Apex ফ্রেমওয়ার্ক, যা বড় ডেটাসেট বা দীর্ঘ সময় ধরে চলা কার্যক্রম ছোট ছোট অংশে ভাগ করে প্রসেস করার জন্য ব্যবহৃত হয়। Salesforce-এর গভর্নর লিমিট থাকা সত্ত্বেও Batch Apex বড় ডেটাসেটের উপর কার্যক্ষমতা নিশ্চিত করে এবং একাধিক ব্যাচে বিভক্ত করে ডেটা প্রক্রিয়া করে। এটি ব্যবহার করে ডেটাবেসের একটি বড় টেবিলের হাজার হাজার রেকর্ড নিয়মিত আপডেট, প্রসেস, বা ডিলিট করা যায়।


Batch Apex এর প্রধান বৈশিষ্ট্য

  1. বড় ডেটাসেট প্রক্রিয়াকরণ: Batch Apex বড় ডেটাসেট প্রক্রিয়া করতে সক্ষম এবং এটি ডেটা এক্সিকিউশন ২০০টি রেকর্ডের ব্যাচে সম্পন্ন করে।
  2. গভর্নর লিমিট মেনে চলা: Salesforce গভর্নর লিমিটের মধ্যে থেকে কার্যক্ষমতা নিশ্চিত করে এবং প্রতিটি ব্যাচের জন্য গভর্নর লিমিট রিসেট হয়।
  3. Asynchronous Execution: Batch Apex Asynchronous-ভাবে কাজ করে, যা ব্যবহারকারীর অন্য কার্যক্রমে ব্যাঘাত না ঘটিয়ে ব্যাকগ্রাউন্ডে প্রক্রিয়া সম্পন্ন করে।
  4. সামঞ্জস্যপূর্ণ পারফরম্যান্স: Batch Apex-এর মাধ্যমে সময়মাফিক বড় কাজ বা প্রসেসিং সম্পন্ন করা যায়।

Batch Apex ক্লাসের গঠন

Batch Apex ক্লাস তৈরি করতে Database.Batchable ইন্টারফেস ইমপ্লিমেন্ট করতে হয় এবং তিনটি মেথড ব্যবহার করতে হয়:

  1. start: ডেটা প্রসেসিংয়ের জন্য ইনিশিয়াল ডেটাসেট বা কুয়েরি সিলেক্ট করে।
  2. execute: নির্দিষ্ট সংখ্যক রেকর্ডের উপর কার্যক্রম পরিচালনা করে।
  3. finish: ব্যাচ প্রক্রিয়াকরণ শেষে যে কাজ করতে হবে তা সম্পন্ন করে।

Batch Apex ক্লাসের উদাহরণ

নিচে Account অবজেক্টের ডেটা প্রসেস করতে একটি সাধারণ Batch Apex ক্লাসের উদাহরণ দেয়া হলো।

public class AccountBatchExample implements Database.Batchable<SObject> {
    
    // start মেথডে প্রাথমিক SOQL কুয়েরি বা ডেটাসেট সিলেক্ট করা হয়
    public Database.QueryLocator start(Database.BatchableContext BC) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }
    
    // execute মেথডে প্রতিটি ব্যাচের ২০০টি রেকর্ড প্রক্রিয়া করা হয়
    public void execute(Database.BatchableContext BC, List<SObject> scope) {
        for (SObject s : scope) {
            Account acc = (Account) s;
            acc.Name = acc.Name + ' Updated';
        }
        update scope;
    }
    
    // finish মেথডে ব্যাচ প্রক্রিয়াকরণের পরে চূড়ান্ত কাজ সম্পন্ন করা হয়
    public void finish(Database.BatchableContext BC) {
        System.debug('Batch process completed.');
    }
}

// Batch Apex ক্লাস এক্সিকিউট করা
Database.executeBatch(new AccountBatchExample(), 100);
  • start মেথড: ডেটাসেট বা কুয়েরি সিলেক্ট করে এবং Database.QueryLocator রিটার্ন করে।
  • execute মেথড: প্রতিটি ব্যাচের ২০০টি রেকর্ডের উপর কার্যক্রম চালায়।
  • finish মেথড: ব্যাচ প্রসেস শেষ হলে চূড়ান্ত কাজ বা লগিং সম্পন্ন করে।

Batch Apex চালানো

Batch Apex ক্লাস চালানোর জন্য Database.executeBatch() মেথড ব্যবহার করতে হয়। এখানে, প্রথম প্যারামিটার হিসেবে Batch Apex ক্লাসের ইনস্ট্যান্স এবং দ্বিতীয় প্যারামিটার হিসেবে ব্যাচ সাইজ প্রদান করতে হয়।

Database.executeBatch(new AccountBatchExample(), 100);

এখানে 100 হল ব্যাচ সাইজ, অর্থাৎ প্রতিটি ব্যাচে ১০০টি রেকর্ড প্রক্রিয়াকৃত হবে।


Batch Apex এর ব্যবহার ক্ষেত্র

  1. বড় ডেটাসেট প্রসেসিং: Salesforce গভর্নর লিমিট অতিক্রম না করে বড় ডেটাসেট প্রক্রিয়া করতে ব্যবহার করা হয়।
  2. নিয়মিত ডেটা ক্লিন-আপ: ডেটাবেস থেকে পুরানো বা অপ্রয়োজনীয় ডেটা ডিলিট করা।
  3. ব্যাকগ্রাউন্ড প্রসেসিং: Async ভাবে ব্যাকগ্রাউন্ডে ডেটা প্রসেসিং পরিচালনা করা।
  4. রিপোর্টিং এবং অ্যানালাইসিস: বড় ডেটাসেটের উপর নির্দিষ্ট সময়ে রিপোটিং বা অ্যানালাইসিস চালানো।

ভালো অনুশীলন

  1. সঠিক ব্যাচ সাইজ নির্ধারণ: গভর্নর লিমিটের মধ্যে থেকে কার্যক্ষমতা উন্নত করতে উপযুক্ত ব্যাচ সাইজ নির্ধারণ করা উচিত।
  2. লজিক্যাল লিমিট মেনে চলুন: বড় SOQL কুয়েরি ব্যবহার করে ব্যাচ এক্সিকিউট করার সময় গভর্নর লিমিট মেনে চলুন।
  3. Exception Handling যুক্ত করুন: Batch Apex প্রক্রিয়াকরণের সময় ত্রুটি হলে সেগুলি ধরে এবং ব্যবস্থাপনার জন্য Exception Handling ব্যবহার করুন।
  4. Test Coverage নিশ্চিত করুন: Batch Apex-এর জন্য সঠিক Unit Test তৈরি করে ৭৫% কোড কভারেজ নিশ্চিত করুন।

সংক্ষেপে

Batch Apex বড় ডেটাসেট বা দীর্ঘমেয়াদী কার্যক্রম ছোট ব্যাচে ভাগ করে প্রক্রিয়া করার একটি শক্তিশালী পদ্ধতি, যা Salesforce গভর্নর লিমিটের মধ্যে থেকে কার্যক্ষমতা নিশ্চিত করে। Batch Apex বড় ডেটা ক্লিন-আপ, ডেটা প্রসেসিং, এবং অ্যাসিঙ্ক্রোনাস কার্যক্রমে ব্যবহৃত হয় এবং Salesforce অ্যাপ্লিকেশনকে আরও কার্যকর ও সুরক্ষিত রাখতে সহায়ক।

Content added By

Batch Apex Execution এবং Batch Size Optimization

222
222

Batch Apex Execution এবং Batch Size Optimization হলো Salesforce-এ Batch Apex সঠিকভাবে সম্পাদনের জন্য গুরুত্বপূর্ণ দুটি দিক। Batch Execution প্রক্রিয়াকরণের কাজকে ছোট ছোট অংশে ভাগ করে কার্যক্ষমতা বাড়ায়, এবং Batch Size Optimization সঠিক ব্যাচ সাইজ নির্ধারণ করে গভর্নর লিমিট মেনে কার্যক্ষমতা নিশ্চিত করে।


Batch Apex Execution

Batch Apex Execution হলো Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের একটি প্রক্রিয়া, যা ডেটাকে ছোট ছোট অংশে ভাগ করে কার্যসম্পাদনা করে। এতে তিনটি ধাপ রয়েছে: start, execute, এবং finish

1. Start Method

Start Method ডেটা সংগ্রহ করে প্রক্রিয়াকরণের জন্য প্রস্তুত করে। এখানে SOQL কুয়েরির মাধ্যমে প্রক্রিয়াকরণের জন্য ডেটা সিলেক্ট করা হয়।

global Database.QueryLocator start(Database.BatchableContext BC) {
    return Database.getQueryLocator('SELECT Id, Name FROM Account');
}
  • Database.QueryLocator: এটি SOQL কুয়েরির রেকর্ড রিটার্ন করে যা প্রক্রিয়াকরণের জন্য নির্বাচন করা হয়।

2. Execute Method

Execute Method প্রক্রিয়াকরণের মূল অংশ, যা ব্যাচে নির্দিষ্ট কাজ চালায়। এখানে ছোট ব্যাচে ডেটা প্রসেস করে এবং প্রয়োজনীয় DML অপারেশন চালানো হয়।

global void execute(Database.BatchableContext BC, List<SObject> scope) {
    for (SObject s : scope) {
        Account acc = (Account) s;
        acc.Name = acc.Name + ' - Processed';
    }
    update scope;
}
  • scope Parameter: ব্যাচে ছোট অংশে বিভক্ত রেকর্ডসমূহ scope প্যারামিটার হিসেবে প্রদান করা হয়।

3. Finish Method

Finish Method সমস্ত ব্যাচ সম্পন্ন হওয়ার পরে চূড়ান্ত কাজ সম্পন্ন করে, যেমন লগিং, নোটিফিকেশন, বা ডেটা সংরক্ষণ করা।

global void finish(Database.BatchableContext BC) {
    System.debug('Batch process completed.');
}

Batch Size Optimization

Batch Size Optimization হল এমন একটি কৌশল যা ব্যাচের সঠিক সাইজ নির্ধারণ করে, যাতে গভর্নর লিমিট মেনে কার্যক্ষমতা নিশ্চিত হয়। Salesforce-এ ডিফল্ট ব্যাচ সাইজ হলো ২০০, কিন্তু বড় ডেটাসেট বা ভারী প্রক্রিয়াকরণের জন্য এই সাইজ প্রয়োজন অনুযায়ী পরিবর্তন করা যায়।

Batch Size Optimization এর কারণ

  1. গভর্নর লিমিট মেনে চলা: ছোট ব্যাচ সাইজ গভর্নর লিমিটের মধ্যে কাজ সম্পন্ন করতে সহায়ক।
  2. কার্যক্ষমতা বৃদ্ধি: সঠিক ব্যাচ সাইজের মাধ্যমে ব্যাচ অপ্টিমাইজ করে কার্যক্ষমতা বাড়ানো যায়।
  3. সিস্টেম স্টেবিলিটি নিশ্চিত: বড় সাইজের কারণে সিস্টেমে অতিরিক্ত লোড পড়তে পারে, যা সিস্টেমকে অস্থিতিশীল করতে পারে।

Batch Size নির্বাচন করার সময় বিবেচনা করার বিষয়

  1. SOQL এবং DML লিমিট: প্রতি ব্যাচে SOQL এবং DML লিমিটের কথা বিবেচনা করে ব্যাচ সাইজ নির্ধারণ করতে হবে।
  2. ব্যাচে প্রক্রিয়াকরণের লজিক: ভারী লজিকের জন্য ছোট ব্যাচ সাইজ রাখা উত্তম।
  3. ডেটা ভলিউম: বড় ডেটাসেট প্রক্রিয়াকরণের সময় ছোট ব্যাচ সাইজ নিশ্চিত করে কার্যকারিতা।
  4. Governor Limits: ১০০ টির কম সাইজ বড় ব্যাচ প্রক্রিয়াকরণের জন্য কার্যকরী।

উদাহরণ: Batch Size সেট করা

Database.executeBatch(new BatchExample(), 100);
  • 100: এখানে ব্যাচ সাইজ ১০০ সেট করা হয়েছে, যা গভর্নর লিমিট মেনে চলতে সহায়ক।

Batch Size Optimization এর ভালো অনুশীলন

ভারী লজিকের জন্য ছোট ব্যাচ সাইজ ব্যবহার করুন: বড় ব্যাচের জন্য ৫০ বা ১০০ এর মতো ছোট সাইজ কার্যক্ষমতা বাড়াতে পারে।

Testing এবং Monitoring ব্যবহার করুন: ছোট থেকে বড় সাইজের মধ্যে বিভিন্ন ব্যাচ সাইজ টেস্ট করে কার্যক্ষমতা পরীক্ষা করুন।

ব্যাচ সাইজকে ডায়নামিকভাবে সেট করুন: বিভিন্ন পরিস্থিতি অনুযায়ী ব্যাচ সাইজ নির্ধারণ করতে ডায়নামিক অপশন ব্যবহার করা যায়।

Exception Handling যুক্ত করুন: গভর্নর লিমিট অতিক্রম এড়াতে Exception Handling নিশ্চিত করুন।

Database.Stateful ব্যবহার করুন: Database.Stateful ব্যবহার করে ব্যাচ সাইজের সঠিকতা এবং ডেটা স্টেট ট্র্যাক করা যেতে পারে।

উদাহরণ: Stateful Batch Apex

global class StatefulBatchExample implements Database.Batchable<SObject>, Database.Stateful {
    global Integer processedRecords = 0;

    global Database.QueryLocator start(Database.BatchableContext BC) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    global void execute(Database.BatchableContext BC, List<SObject> scope) {
        for (SObject s : scope) {
            Account acc = (Account) s;
            acc.Name = acc.Name + ' - Processed';
            processedRecords++;
        }
        update scope;
    }

    global void finish(Database.BatchableContext BC) {
        System.debug('Total Records Processed: ' + processedRecords);
    }
}
  • Database.Stateful: এখানে Stateful ইন্টারফেস ব্যবহার করে ব্যাচ প্রসেসিং চলাকালীন ডেটা স্টেট ট্র্যাক রাখা হয়েছে।

Batch Apex Execution এর সময় সতর্কতা

  1. ব্যাচে বড় SOQL বা DML এড়িয়ে চলুন: একাধিক SOQL বা DML অপারেশন একত্রে না করে ছোট ব্যাচে বিভক্ত করুন।
  2. Governor Limit মনিটরিং: Batch Apex পরিচালনার সময় গভর্নর লিমিট মেনে চলুন।
  3. সঠিক Logging এবং Monitoring নিশ্চিত করুন: ব্যাচ প্রসেসিংয়ের সময় সঠিকভাবে লগিং এবং মনিটরিং নিশ্চিত করুন।

সারসংক্ষেপ

Batch Apex Execution Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের একটি কার্যকরী পদ্ধতি, যা তিনটি মেথড (start, execute, এবং finish) দ্বারা কাজ করে। Batch Size Optimization গভর্নর লিমিট মেনে চলা এবং কার্যক্ষমতা নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। ছোট ব্যাচ সাইজ ভারী প্রক্রিয়াকরণের জন্য কার্যকরী এবং বড় ব্যাচের জন্য বেশি কার্যক্ষম। সঠিক ব্যাচ সাইজ নির্বাচন, Exception Handling, এবং Logging নিশ্চিত করে Batch Apex Execution আরও কার্যকরী করা সম্ভব।

Content added By

Batch Apex এবং Governor Limits

199
199

Batch Apex Salesforce-এ বড় ডেটাসেট প্রক্রিয়া করার জন্য ব্যবহৃত একটি Asynchronous ফ্রেমওয়ার্ক, যা বড় ডেটাসেটকে ছোট ছোট ব্যাচে ভাগ করে গভর্নর লিমিট মেনে কার্যক্ষমতা নিশ্চিত করে। Governor Limits হলো Salesforce-এর নির্ধারিত সীমা, যা প্রতিটি অ্যাপ্লিকেশন বা ট্রানজ্যাকশনের জন্য সিস্টেমের রিসোর্স ব্যবহারের পরিমাণ সীমাবদ্ধ করে। Batch Apex গভর্নর লিমিট মেনে চলতে অত্যন্ত কার্যকর, কারণ প্রতিটি ব্যাচের জন্য গভর্নর লিমিট পুনরায় রিসেট হয়।


Batch Apex এবং Governor Limits এর সম্পর্ক

Batch Apex মূলত বড় ডেটাসেট বা বড় কার্যক্রম একবারে প্রসেস না করে কয়েকটি ছোট ব্যাচে ভাগ করে সম্পন্ন করে। এটি গভর্নর লিমিট মেনে কার্যক্রম সম্পন্ন করতে সক্ষম হয়, কারণ প্রতিটি ব্যাচ একক ট্রানজ্যাকশন হিসেবে বিবেচিত হয় এবং প্রতিটি ব্যাচের জন্য গভর্নর লিমিট পুনরায় শুরু হয়। এভাবে Batch Apex গভর্নর লিমিটের মধ্যে থেকে বড় ডেটাসেটের উপর কার্যক্রম পরিচালনা করতে পারে।


Batch Apex এর কিছু গুরুত্বপূর্ণ Governor Limits

Batch Apex-এর ক্ষেত্রে Salesforce কিছু নির্দিষ্ট গভর্নর লিমিট প্রয়োগ করে, যা প্রতিটি ব্যাচ বা পুরো ব্যাচ জব-এর জন্য প্রযোজ্য।

প্রতি ব্যাচের জন্য গভর্নর লিমিট

  1. SOQL Query Limit: প্রতি ব্যাচের জন্য সর্বাধিক ১০০টি SOQL কুয়েরি।
  2. DML Operation Limit: প্রতি ব্যাচের জন্য সর্বাধিক ১৫০টি DML স্টেটমেন্ট।
  3. CPU Time Limit: প্রতি ব্যাচের জন্য সর্বাধিক ১০,০০০ মিলিসেকেন্ড (১০ সেকেন্ড) CPU সময়।
  4. Heap Size Limit: প্রতি ব্যাচের জন্য সর্বাধিক ৬ এমবি Heap Size।
  5. Callouts: প্রতি ব্যাচের জন্য সর্বাধিক ১০০টি HTTP কলআউট।

পুরো ব্যাচ জব-এর জন্য সীমা

  1. Total Number of Records: একটি ব্যাচ জব সর্বাধিক ৫০ মিলিয়ন রেকর্ড প্রক্রিয়া করতে পারে।
  2. Total Number of Batches: একটি Batch Apex জব সর্বাধিক ২৫০,০০০ ব্যাচ প্রসেস করতে পারে।
  3. Total Number of Active Batch Jobs: একই সময়ে সর্বাধিক ৫টি অ্যাকটিভ ব্যাচ জব চালানো যায়।

Governor Limits মেনে Batch Apex অপ্টিমাইজ করার কৌশল

সঠিক ব্যাচ সাইজ নির্ধারণ: গভর্নর লিমিট অতিক্রম না করে কার্যক্ষমতা বাড়াতে ব্যাচ সাইজ উপযুক্তভাবে নির্ধারণ করা গুরুত্বপূর্ণ। সাধারণত, প্রতি ব্যাচে ১০০ থেকে ২০০ রেকর্ড ব্যবহার করা একটি ভালো অনুশীলন।

SOQL Query Optimisation: SOQL কুয়েরি অপ্টিমাইজ করে গভর্নর লিমিট মেনে চলা উচিত। WHERE এবং LIMIT ক্লজ ব্যবহার করে অপ্রয়োজনীয় ডেটা রিটার্ন করা এড়ানো উচিত।

Bulk DML ব্যবহার: DML স্টেটমেন্ট সীমা মেনে চলতে Bulk DML (যেমন update scope;) ব্যবহার করে কয়েকটি রেকর্ড একত্রে আপডেট করা উচিত।

Batch Size এবং গভর্নর লিমিট রিসেট: প্রতিটি ব্যাচ গভর্নর লিমিট পুনরায় রিসেট করে কাজ করে, যা বড় কাজ পরিচালনা সহজ করে এবং গভর্নর লিমিট অতিক্রম না করেই কার্যক্ষমতা বজায় রাখে।

Exception Handling যুক্ত করুন: ব্যাচ জব-এ Exception Handling অন্তর্ভুক্ত করে ত্রুটি পরিচালনা করতে হবে, যাতে কোনো ত্রুটি ঘটলেও বাকি ব্যাচ প্রক্রিয়া সম্পন্ন হয়।


উদাহরণ: Batch Apex এবং Governor Limits

নিচে একটি Batch Apex উদাহরণ দেয়া হলো, যা Account অবজেক্টের নাম আপডেট করে।

public class AccountBatchExample implements Database.Batchable<SObject> {

    public Database.QueryLocator start(Database.BatchableContext BC) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    public void execute(Database.BatchableContext BC, List<SObject> scope) {
        for (SObject s : scope) {
            Account acc = (Account) s;
            acc.Name = acc.Name + ' Updated';
        }
        update scope;
    }

    public void finish(Database.BatchableContext BC) {
        System.debug('Batch process completed.');
    }
}

// Batch Apex ক্লাস চালানোর জন্য
Database.executeBatch(new AccountBatchExample(), 100);
  • start মেথড: start মেথড একটি SOQL কুয়েরি ব্যবহার করে Account রেকর্ডের একটি লিস্ট রিটার্ন করে।
  • execute মেথড: execute মেথড প্রতিটি ব্যাচের জন্য কাজ সম্পন্ন করে এবং update scope; ব্যবহার করে Bulk DML অপারেশন সম্পন্ন করে।
  • finish মেথড: finish মেথড সম্পূর্ণ ব্যাচ প্রক্রিয়াকরণ শেষে একটি বার্তা প্রিন্ট করে।

কেন Governor Limits মেনে Batch Apex ব্যবহার করা জরুরি?

ডেটাবেস স্থিতিশীলতা: গভর্নর লিমিট মেনে কাজ করলে ডেটাবেসের স্থিতিশীলতা বজায় থাকে এবং সিস্টেম অতিরিক্ত লোড এড়িয়ে চলে।

বড় ডেটাসেট প্রক্রিয়াকরণ: বড় ডেটাসেটকে একত্রে না করে ছোট ব্যাচে ভাগ করা হয়, যা গভর্নর লিমিট অতিক্রম না করেই কার্যক্ষমতা নিশ্চিত করে।

ডেটা সুরক্ষা এবং নিয়ন্ত্রণ: গভর্নর লিমিট মেনে কাজ করার মাধ্যমে ডেটার সুরক্ষা এবং নিয়ন্ত্রণ বজায় থাকে।

সহজ ত্রুটি নির্ণয়: গভর্নর লিমিট মেনে কাজ করলে প্রতিটি ব্যাচে ত্রুটি সহজে শনাক্ত করা যায় এবং নির্দিষ্ট ব্যাচে শুধুমাত্র ত্রুটি সমাধান করা সম্ভব হয়।


সংক্ষেপে

Batch Apex Salesforce গভর্নর লিমিট মেনে বড় ডেটাসেট প্রক্রিয়াকরণে সহায়ক। এটি বড় কাজগুলোকে ছোট ব্যাচে ভাগ করে পরিচালনা করে এবং প্রতিটি ব্যাচের জন্য গভর্নর লিমিট পুনরায় শুরু হয়, যা কার্যক্ষমতা উন্নত করে। Apex ডেভেলপমেন্টে গভর্নর লিমিট মেনে Batch Apex ব্যবহার একটি ভালো এবং নিরাপদ অনুশীলন, যা অ্যাপ্লিকেশন স্থায়িত্ব এবং নির্ভরযোগ্যতা নিশ্চিত করে।

Content added By

Batch Apex এর সঠিক ব্যবস্থাপনা এবং Best Practices

219
219

Batch Apex Salesforce প্ল্যাটফর্মে বড় ডেটাসেট প্রক্রিয়াকরণ এবং পরিচালনার জন্য ব্যবহৃত একটি শক্তিশালী টুল। সঠিক ব্যবস্থাপনা এবং Best Practices অনুসরণ করে Batch Apex আরও কার্যকর, স্থিতিশীল এবং গভর্নর লিমিট মেনে কাজ সম্পন্ন করতে সহায়ক। সঠিক ব্যবস্থাপনা নিশ্চিত করতে সঠিক ব্যাচ সাইজ নির্বাচন, Exception Handling, এবং ডেটা সুরক্ষা নিশ্চিত করতে কিছু গুরুত্বপূর্ণ কৌশল অনুসরণ করতে হয়।


Batch Apex এর সঠিক ব্যবস্থাপনা

Batch Apex ব্যবস্থাপনা Salesforce-এ কার্যকর প্রক্রিয়াকরণের জন্য বেশ কিছু কৌশল মেনে চলে। এর মধ্যে রয়েছে সঠিক ব্যাচ সাইজ নির্বাচন, লজিক অপ্টিমাইজ করা, এবং গভর্নর লিমিট মেনে কাজ করা।

সঠিক ব্যবস্থাপনার প্রধান দিকগুলো:

ব্যাচ সাইজ নির্ধারণ: ব্যাচের সঠিক সাইজ নিশ্চিত করে গভর্নর লিমিটের মধ্যে প্রক্রিয়া সম্পন্ন করতে হবে। বড় প্রক্রিয়ার জন্য সাধারণত ব্যাচ সাইজ ৫০ থেকে ১০০ করা উত্তম।

Database.executeBatch(new BatchExample(), 100);

Batchable Context ব্যবহার করা: BatchableContext ব্যবহার করে প্রতিটি ব্যাচের প্রসেস ট্র্যাক করা যায় এবং প্রয়োজনমতো ব্যাচ সাইজ এবং অবস্থান নিয়ন্ত্রণ করা যায়।

Stateful ইন্টারফেস: Database.Stateful ইন্টারফেস ব্যবহার করে ডেটা স্টেট ট্র্যাক রাখা যায়, যাতে ব্যাচ প্রসেসিং চলাকালীন একটি চলমান ডেটা অবস্থান রাখা যায়।

global class StatefulBatchExample implements Database.Batchable<SObject>, Database.Stateful {
    global Integer processedRecords = 0;
    
    // execute method
}

Scheduled Batch Apex: বড় প্রসেসের জন্য Batch Apex একটি নির্দিষ্ট সময়ে চালানোর জন্য Schedulable ইন্টারফেস ব্যবহার করে নির্ধারিত সময়ে প্রসেসিং করা যায়।

System.schedule('Nightly Batch Job', '0 0 1 * * ?', new BatchExample());

গভর্নর লিমিট মেনে চলা: SOQL, DML এবং অন্যান্য গভর্নর লিমিট মেনে চলার জন্য যথাসম্ভব সীমিত অপারেশন করা উচিত। প্রতি ব্যাচে SOQL এবং DML অপারেশন সীমাবদ্ধ করা প্রয়োজন।


Batch Apex এর Best Practices

Batch Apex এর জন্য কিছু Best Practices অনুসরণ করলে প্রক্রিয়াকরণ আরও স্থিতিশীল, কার্যকরী এবং গভর্নর লিমিটের মধ্যে সম্পন্ন করা যায়।

Best Practices এর মূল দিকগুলো:

ব্যাচ সাইজ সীমাবদ্ধ রাখুন: বড় ডেটাসেটের জন্য ব্যাচ সাইজ ৫০ থেকে ১০০ নির্ধারণ করুন। ভারী লজিক্যাল প্রক্রিয়াকরণে ছোট ব্যাচ সাইজ ব্যবহার করা উত্তম।

Exception Handling ব্যবহার করুন: প্রতিটি ব্যাচে Exception Handling নিশ্চিত করুন, যাতে কোনো ব্যাচে সমস্যা হলে পুরো প্রক্রিয়া ব্যাহত না হয়।

global void execute(Database.BatchableContext BC, List<SObject> scope) {
    try {
        update scope;
    } catch (Exception e) {
        System.debug('Error processing batch: ' + e.getMessage());
    }
}

Database.Stateful ব্যবহার করুন: ব্যাচ প্রসেস চলাকালীন কোনো ডেটা স্টেট ট্র্যাক করতে Database.Stateful ব্যবহার করুন। এটি বড় প্রসেসের জন্য কার্যকরী।

SOQL ইনজেকশন প্রতিরোধ করুন: ইনপুট স্যানিটাইজেশন এবং Bind Variable ব্যবহার করে SOQL ইনজেকশন প্রতিরোধ নিশ্চিত করুন।

String safeInput = String.escapeSingleQuotes(input);

আলাদা টেস্ট ক্লাস তৈরি করুন: Batch Apex-এ ৭৫% টেস্ট কাভারেজ নিশ্চিত করার জন্য আলাদা টেস্ট ক্লাস এবং মেথড ব্যবহার করুন।

@isTest
public class BatchExampleTest {
    @isTest
    static void testBatchExecution() {
        Test.startTest();
        Database.executeBatch(new BatchExample(), 100);
        Test.stopTest();
    }
}

Scheduled Jobs এর সংখ্যা নিয়ন্ত্রণ করুন: একাধিক ব্যাচ জব নির্ধারণ করলে সিস্টেমে লোড পড়তে পারে, তাই নির্দিষ্ট সময়ে একাধিক ব্যাচ না চালিয়ে পরিকল্পিতভাবে ব্যাচ চালান।

Logging এবং Monitoring নিশ্চিত করুন: ব্যাচ প্রসেসের সময় সঠিকভাবে লগ এবং মনিটরিং ব্যবস্থা নিশ্চিত করুন, যাতে কোনো ব্যাচ সফল হয়েছে বা ব্যর্থ হয়েছে তা ট্র্যাক করা যায়।

Database.SaveResult ব্যবহার করুন: ব্যাচ প্রসেসিং-এর সময় কোনো রেকর্ডে ত্রুটি হলে Database.SaveResult ব্যবহার করে ত্রুটি সনাক্ত করুন এবং ত্রুটি রেকর্ড ট্যাগ করে রাখুন।

Database.SaveResult[] results = Database.update(scope, false);
for (Database.SaveResult sr : results) {
    if (!sr.isSuccess()) {
        System.debug('Failed Record: ' + sr.getErrors()[0].getMessage());
    }
}

Reusability এবং Optimization নিশ্চিত করুন: Batch Apex ক্লাসকে পুনরায় ব্যবহারযোগ্য এবং সহজে পরিবর্তনযোগ্য রাখুন। যে লজিক অন্য ক্লাসে পুনরায় ব্যবহৃত হতে পারে, তা আলাদা মেথডে সংরক্ষণ করুন।

Governor Limit Logging: গভর্নর লিমিট এবং API লিমিট ট্র্যাক করে প্রয়োজনে প্রসেস পরিবর্তন করুন।


Batch Apex Management এবং Best Practices এর সারসংক্ষেপ

Batch Apex Salesforce-এ বড় ডেটাসেট প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকরী এবং নির্ভরযোগ্য একটি পদ্ধতি। সঠিক ব্যবস্থাপনা নিশ্চিত করতে সঠিক ব্যাচ সাইজ, Stateful ব্যবহার, এবং গভর্নর লিমিটের মধ্যে কাজ সম্পন্ন করা গুরুত্বপূর্ণ। এছাড়াও, Exception Handling, SOQL ইনজেকশন প্রতিরোধ, Logging এবং Monitoring, এবং Test Coverage নিশ্চিত করা উত্তম প্রক্রিয়াগুলো অনুসরণ করে Batch Apex-এর কার্যক্ষমতা, স্থিতিশীলতা, এবং নিরাপত্তা বৃদ্ধি করা যায়।

Batch Apex ব্যবস্থাপনার সঠিক অনুশীলনগুলি মেনে চলার মাধ্যমে বড় ডেটাসেট এবং জটিল প্রক্রিয়াকরণের ক্ষেত্রে Salesforce অ্যাপ্লিকেশন আরও কার্যকরী এবং নিরাপদ রাখা সম্ভব।

Content added By
Promotion